package orlowski.kamil.simple.app.activity;

import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.test.ApplicationTestCase;
import android.test.MoreAsserts;
import orlowski.kamil.simple.app.MainApplication;
import orlowski.kamil.simple.app.R;

/**
 * Created by Kamil on 2014-10-20.
 * Main application tests
 */
public class MainApplicationTests extends ApplicationTestCase<MainApplication> {
    private MainApplication mainApplication;
    private PackageInfo info;

    public MainApplicationTests() {
        super(MainApplication.class);
    }

    /**
     * metoda getApplication tworzy aplikacje, dzięki niej
     * możemy przetestować zasoby znajdujące się w MainApplication
     * @throws Exception
     */
    @Override
    protected void setUp() throws Exception {
        super.setUp();
        createApplication();
        mainApplication = getApplication();
        info = mainApplication.getPackageManager().getPackageInfo(mainApplication.getPackageName(), 0);
    }

    /**
     * Metoda, która testuje dane szeroko dostępne w całej aplikacji.
     * Możemy korzystać z adnotacji jakie dostarcza nam JUnit
     */
    public void testShouldInitializeInstances() {
        assertNotNull(mainApplication.listSimpleResources);
        assertEquals(3, mainApplication.listSimpleResources.size());
    }

    /**
     * Test ikony, czy jest poprawna
     * @throws PackageManager.NameNotFoundException
     */
    public void testCorrectIcon() throws PackageManager.NameNotFoundException {
        assertEquals(R.drawable.ic_launcher, info.applicationInfo.icon);
    }

    /**
     * Test wzorca, który określa wersję naszej aplikacji
     * JUnit nie udostępnia asercji do testowania wyrażeń regularnych,
     * więc wykorzystamy asercję z pakietu android.test
     * @throws Exception
     */
    public void testCorrectVersionPattern() throws Exception {
        MoreAsserts.assertMatchesRegex("\\d\\.\\d", info.versionName);
    }
}
